home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / devpac.fpl < prev    next >
Text File  |  1995-07-18  |  5KB  |  202 lines

  1. /******************************
  2.  * Read Devpac.FPL.README!    *
  3.  * Written by Peter Carlsson  *
  4.  ******************************/
  5.  
  6. /* Assemble file */
  7.  
  8. export void Asm_Assemble(void)
  9. {
  10.     string file = ReadInfo("file_name");
  11.  
  12.     string command = sprintf("CD \"%s\"\n%s >T:GenAmOutput %s %s",
  13.         ReadInfo("file_path"),
  14.         ReadInfo("_Assembler"),
  15.         ReadInfo("_Asm_opt"),
  16.         file);
  17.  
  18.     SaveChanges();
  19.     Status(0, sprintf("Assembling %s", file));
  20.     System(command);
  21.     Asm_InitErrors();
  22. }
  23.  
  24. /* Debug file */
  25.  
  26. export void Asm_Debug(void)
  27. {
  28.     string file = ReadInfo("full_file_name");
  29.     file = substr(file, 0 , strstr(file, ".s"));
  30.  
  31.     if(Check(file)) {
  32.         Status(0, sprintf("Debugging %s", Stcgfn(file)));
  33.         System(sprintf("CD \"%s\"\n%s %s",
  34.             Stcgfp(file),
  35.             ReadInfo("_Debugger"),
  36.             Stcgfn(file)));
  37.     } else
  38.         ReturnStatus("No executable file found");
  39. }
  40.  
  41. /* Make executable file */
  42.  
  43. export void Asm_Make(void)
  44. {
  45.     string file = ReadInfo("file_name");
  46.  
  47.     string command = sprintf("CD \"%s\"\n%s >T:GenAmOutput %s %s",
  48.         ReadInfo("file_path"),
  49.         ReadInfo("_Assembler"),
  50.         ReadInfo("_Make_opt"),
  51.         file);
  52.  
  53.     SaveChanges();
  54.     Status(0, "Making executable file");
  55.     System(command);
  56.     Asm_InitErrors();
  57. }
  58.  
  59. /* Execute file */
  60.  
  61. export void Asm_Execute(void)
  62. {
  63.     string file = ReadInfo("full_file_name");
  64.     file = substr(file, 0 , strstr(file, ".s"));
  65.  
  66.     if(Check(file)) {
  67.         Status(0, sprintf("Executing %s", Stcgfn(file)));
  68.         System(sprintf("CD \"%s\"\n%s",
  69.             Stcgfp(file),
  70.             Stcgfn(file)));
  71.     } else
  72.         ReturnStatus("No executable file found");
  73. }
  74.  
  75. /* Set pointer to first error (if any) */
  76.  
  77. export void Asm_InitErrors(void)
  78. {
  79.     System(ReadInfo("_Parser"));
  80.  
  81.     errorNr = -1;
  82.     LoadBlock("T:FrexxGenOutput");
  83.     if (strlen(GetBlockLine(0))) {
  84.         maxError = (ReadInfo("lines", errorID) - 1) / 3;
  85.         Asm_NextError();
  86.     } else
  87.         ReturnStatus("No errors");
  88. }
  89.  
  90. /* Jump to error */
  91.  
  92. export void Asm_NextError(void)
  93. {
  94.     if ((++errorNr) >= maxError) {
  95.         errorNr--;
  96.         DisplayBeep();
  97.         ReturnStatus("Last error");
  98.     } else
  99.         JumpError();
  100. }
  101.  
  102. export void Asm_PrevError(void)
  103. {
  104.     if ((--errorNr) < 0) {
  105.         errorNr++;
  106.         DisplayBeep();
  107.         ReturnStatus("First error");
  108.     } else
  109.         JumpError();
  110. }
  111.  
  112. void JumpError(void)
  113. {
  114.     errPosY = atoi(GetBlockLine((errorNr * 3) + 1));
  115.     errPosX = atoi(GetBlockLine((errorNr * 3) + 2));
  116.  
  117.     GotoLine(errPosY, errPosX - 1);
  118.     CenterView();
  119.     ReturnStatus(GetBlockLine((errorNr * 3) + 3));
  120. }
  121.  
  122. int LoadBlock(string fileName)
  123. {
  124.     if (errorID) {
  125.         Kill(errorID);
  126.         errorID = 0;
  127.     }
  128.     errorID = BlockCreate("AssembleErrors");
  129.     return (StringToBlock(LoadString(fileName), errorID));
  130. }
  131.  
  132. string GetBlockLine(int lineNum)
  133. {
  134.     int currentID = GetBufferID();
  135.     string lineStr;
  136.  
  137.     CurrentBuffer(errorID);
  138.     lineStr = substr(GetLine(lineNum), 0, strlen(GetLine(lineNum)) - 1);
  139.     CurrentBuffer(currentID);
  140.     return (lineStr);
  141. }
  142.  
  143. /* Change settings */
  144.  
  145. export void Asm_Settings(void)
  146. {
  147.     string assembler = ReadInfo("_Assembler"),
  148.            make      = ReadInfo("_Make"),
  149.            debugger  = ReadInfo("_Debugger"),
  150.            asmopt    = ReadInfo("_Asm_opt"),
  151.            makeopt   = ReadInfo("_Make_opt"),
  152.            parser    = ReadInfo("_Parser");
  153.  
  154.     if (RequestWindow("Assembler Settings",
  155.         "Assembler",              "S", &assembler,
  156.         "Make",                   "S", &make,
  157.         "Debugger",               "S", &debugger,
  158.         "Assembler Options",      "S", &asmopt,
  159.         "Assembler Make Options", "S", &makeopt,
  160.         "Parser",                 "S", &parser))
  161.     {
  162.         SetInfo(0, "_Assembler", assembler,
  163.                    "_Make",      make,
  164.                    "_Debugger",  debugger,
  165.                    "_Asm_opt",   asmopt,
  166.                    "_Make_opt",  makeopt,
  167.                    "_Parser",    parser);
  168.     }
  169. }
  170.  
  171. /* Globals */
  172.  
  173. export int errorID   = 0;
  174. export int errorNr   = 0;
  175. export int errPosY   = 0;
  176. export int errPosX   = 0;
  177. export int maxError  = 0;
  178.  
  179. /* Infos */
  180.  
  181. ConstructInfo("_Assembler", "", "", "GSHW", "", 0, 0, "DevPac:GenAm");
  182. ConstructInfo("_Parser"   , "", "", "GSHW", "", 0, 0, "FrexxEd:Bin/FrexxGen");
  183. ConstructInfo("_Debugger" , "", "", "GSHW", "", 0, 0, "DevPac:MonAm");
  184. ConstructInfo("_Make"     , "", "", "GSHW", "", 0, 0, "DevPac:GenAm");
  185. ConstructInfo("_Asm_opt"  , "", "", "GSHW", "", 0, 0, "DEBUG O+");
  186. ConstructInfo("_Make_opt" , "", "", "GSHW", "", 0, 0, "NODEBUG O+");
  187.  
  188. /* Menu shortcuts */
  189.  
  190. MenuAdd("t", "Assembler");
  191.     MenuAdd("i", "Assemble"      , "Asm_Assemble();",  "Control a");
  192.     MenuAdd("i", "Make"          , "Asm_Make();",      "Control m");
  193.     MenuAdd("i", "Debug"         , "Asm_Debug();",     "Control d");
  194.     MenuAdd("i", "Execute"       , "Asm_Execute();",   "Control x");
  195.     MenuAdd("i", "---");
  196.     MenuAdd("i", "Next Error"    , "Asm_NextError();", "Control n");
  197.     MenuAdd("i", "Previous Error", "Asm_PrevError();", "Control p");
  198.     MenuAdd("i", "---");
  199.     MenuAdd("i", "Settings..."   , "Asm_Settings();");
  200. MenuBuild();
  201.  
  202.